/*
 * @Author: yuanlai
 * @Date: 2024-08-16 16:01:49
 * @LastEditors: lisong
 * @LastEditTime: 2025-07-07 14:00:56
 * @Description: file content
 */
const { defineConfig } = require('@vue/cli-service')
// 导入速度分析插件
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
// 实例化插件
const smp = new SpeedMeasurePlugin();


// 开启Gzip
// const productionGzip = true
const CompressionPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = /\.(js|css|json|ttf|txt|html|ico|svg)(\?.*)?$/i
// 需要nginx配合设置
// gzip on;
// gzip_static on;
// gzip_min_length 1k;
// gzip_buffers 4 32k;
// gzip_http_version 1.1;
// gzip_comp_level 2;
// gzip_types text/plain application/x-javascript text/css application/xml;
// gzip_vary on;
// gzip_disable "MSIE [1-6].";

// 生产环境
const isProd = process.env.NODE_ENV === 'production';
// cdn相关配置
const cdnConfig = require('./cdn.config.js');

const envConfig = require("./config");

module.exports = defineConfig({
  transpileDependencies: true,
  //设置为空打包后不分根目录还是多级目录
  publicPath: '/demoVue2/',
  // build编译后不生成资源MAP文件
  productionSourceMap: false,
  //
  terser: {
    terserOptions: {
      compress: {
        drop_console: true,//生产环境自动删除console
        drop_debugger: true,//生产环境自动删除debugger
      }
    }
  },
  pages: {
    index: {
      // page 的入口
      entry: 'src/main.js',
      // 模板来源
      template: 'public/index.html',
      // 在 dist/index.html 的输出
      filename: 'index.html',
      // 当使用 title 选项时，
      // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
      title: 'demo-vue2',
      // 在这个页面中包含的块，默认情况下会包含
      // 提取出来的通用 chunk 和 vendor chunk。
      chunks: ['chunk-vendors', 'chunk-common', 'index'],
      // 调用：htmlWebpackPlugin.options.CDN（设置CDN链接）
      CDN: isProd && cdnConfig.useCDN ? cdnConfig.CDN : null
    }
  },
  configureWebpack: smp.wrap({
     // 开启sourceMap
    devtool: process.env.NODE_ENV === "production" ? false : "source-map",
    // 生产环境注入CDN
    externals: isProd && cdnConfig.useCDN ? cdnConfig.externals : {},
    plugins: [
      new CompressionPlugin({
        test: productionGzipExtensions, // 需要压缩的文件类型
        threshold: 10240, // 归档需要进行压缩的文件大小最小值，我这个是10K以上的进行压缩
        deleteOriginalAssets: false, // 是否删除原文件
      }),
      new webpack.DefinePlugin({
        "process.env": envConfig,
      }),
    ],
  })
})
